package com.scsj.supermarket.view.activity.testmodel;

import android.Manifest;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.ActivityCompat;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.scsj.supermarket.R;
import com.scsj.supermarket.utils.CropCircleTransformation;
import com.scsj.supermarket.view.activity.baseactivitymodel.BaseActivity;
import com.vondear.rxtools.RxBroadcastTool;
import com.vondear.rxtools.RxConstTool;
import com.vondear.rxtools.RxDataTool;
import com.vondear.rxtools.RxDeviceTool;
import com.vondear.rxtools.RxEncodeTool;
import com.vondear.rxtools.RxFileTool;
import com.vondear.rxtools.RxIntentTool;
import com.vondear.rxtools.RxNetTool;
import com.vondear.rxtools.RxPermissionsTool;
import com.vondear.rxtools.RxPhotoTool;
import com.vondear.rxtools.RxProcessTool;
import com.vondear.rxtools.RxRegTool;
import com.vondear.rxtools.RxSPTool;
import com.vondear.rxtools.RxServiceTool;
import com.vondear.rxtools.RxShellTool;
import com.vondear.rxtools.RxTimeTool;
import com.vondear.rxtools.RxTool;
import com.vondear.rxtools.RxZipTool;
import com.vondear.rxtools.activity.ActivityScanerCode;
import com.vondear.rxtools.view.RxQRCode;
import com.vondear.rxtools.view.RxToast;
import com.vondear.rxtools.view.dialog.RxDialogChooseImage;
import com.vondear.rxtools.view.dialog.RxDialogSureCancel;
import com.yalantis.ucrop.UCrop;
import com.yalantis.ucrop.UCropActivity;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import static com.vondear.rxtools.view.dialog.RxDialogChooseImage.LayoutType.TITLE;

public class TestFuctionActivity extends BaseActivity {

    private Uri resultUri;
    private ImageView imageView;
    private ImageView mIvQrCode;
    private TextView textView1;

    @Override
    protected void createView(Bundle savedInstanceState) {
        setContentView(R.layout.activity_test_fuction);
    }

    @Override
    protected void initView() {
        imageView = findViewById(R.id.imageviewdk);

        mIvQrCode = findViewById(R.id.iv_qr_code);
        textView1 = findViewById(R.id.textView1);
        Resources r = this.getResources();
        resultUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://"
                + r.getResourcePackageName(R.drawable.ic_launcher_background) + "/"
                + r.getResourceTypeName(R.drawable.ic_launcher_background) + "/"
                + r.getResourceEntryName(R.drawable.ic_launcher_background));

        //获取动态权限
        RxPermissionsTool.
                with(this).
                addPermission(Manifest.permission.ACCESS_FINE_LOCATION).
                addPermission(Manifest.permission.ACCESS_COARSE_LOCATION).
                addPermission(Manifest.permission.READ_EXTERNAL_STORAGE).
                addPermission(Manifest.permission.CAMERA).
                addPermission(Manifest.permission.CALL_PHONE).
                addPermission(Manifest.permission.READ_PHONE_STATE).
                initPermission();
        func4();
    }


    @Override
    protected void initListener() {

    }

    @Override
    protected void initData() {

    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////获取头像
    public void func1(View view) {

//        RxDialogScaleView rxDialogScaleView = new RxDialogScaleView(this);
//        rxDialogScaleView.setImageUri(resultUri);
//        rxDialogScaleView.show();
        initDialogChooseImage();
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////扫描二维码
    public void func2(View view) {
        startActivity(new Intent(TestFuctionActivity.this, ActivityScanerCode.class));
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////生成二维码
    public void func3(View view) {
        //二维码生成方式一  推荐此方法
        RxQRCode.builder("ffffff").
                backColor(getResources().getColor(com.vondear.rxtools.R.color.white)).
                codeColor(getResources().getColor(com.vondear.rxtools.R.color.black)).
                codeSide(600).
                into(mIvQrCode);
        mIvQrCode.setVisibility(View.VISIBLE);
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////获取倒计时
    public void func4() {
        RxTool.countDown(textView1, 100000, 1000, "倒计时计时中……");
    }

///////////////////////////////////////////////////////////////////////////////////////////////////////////// 静默安装

    ProgressBar pg;
    boolean update = false;
    private TextView tv_splash_version;
    private TextView tv_update_info;
    private Context context;
    private String appVersionName;
    /**
     * 例子
     * 下载APk文件并自动弹出安装
     */
/*    public void getFile(String url, final String filePath, String name) {
        OkGo.get(url)//
                .tag(this)//
                .execute(new FileCallback(filePath, name) {  //文件下载时，可以指定下载的文件目录和文件名
                    @Override
                    public void onSuccess(File file, Call call, Response response) {
                        // file 即为文件数据，文件保存在指定目录
                        Intent i = new Intent(Intent.ACTION_VIEW);
                        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        i.setDataAndType(Uri.parse("file://" + file.getAbsolutePath()), "application/vnd.android.package-archive");
                        context.startActivity(i);
                    }

                    @Override
                    public void downloadProgress(long currentSize, long totalSize, float progress, long networkSpeed) {
                        //这里回调下载进度(该回调在主线程,可以直接更新ui)
                    }
                });
    }*/

    private Handler checkhandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (!update) {
                RxToast.showToast(context, "正在检查版本更新...", 500);
                // TODO: 使用 RxDeviceTool.getAppVersionNo(context); 方法 获取当前app版本号 与 提交给服务器 做对比
                String temp = getResources().getString(R.string.newest_apk_down);
                String timeTip = String.format(temp, RxDeviceTool.getAppVersionName(context));
                //  或简化成 String.format(getResources().getString(R.string.newest_apk_down),RxDeviceTool.getAppVersionName(context))
                ShowDialog(timeTip, "your_apk_down_url");
            } else {
                RxToast.showToast(context, "当前为最新版本，无需更新!", 500);
                pg.setVisibility(View.GONE);
            }
        }
    };

    /**
     * 检查是否有新版本，如果有就升级
     */
    private void CheckUpdate() {
        new Thread() {
            public void run() {
                Message msg = checkhandler.obtainMessage();
                checkhandler.sendMessage(msg);
                try {
                    Thread.sleep(2000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                update = true;
                checkhandler.sendMessage(new Message());
            }
        }.start();
    }

    private void ShowDialog(String strAppVersionName, String apk_down_url) {
        final RxDialogSureCancel rxDialogSureCancel = new RxDialogSureCancel(context);//提示弹窗
        rxDialogSureCancel.getContentView().setText(strAppVersionName);
        rxDialogSureCancel.getSureView().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //getFile(apk_down_url, RxFileTool.getDiskFileDir(context) + File.separator + "update", str + ".apk");
                // TODO: 第一步 在此处 使用 你的网络框架下载 新的Apk文件 可参照下面的例子 使用的是 okGo网络框架
                // TODO: 第二步 可使用 RxAppTool.InstallAPK(context,file.getAbsolutePath()); 方法进行 最新版本Apk文件的安装
                rxDialogSureCancel.cancel();
            }
        });
        rxDialogSureCancel.getCancelView().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                RxToast.showToast(context, "已取消最新版本的下载", 500);
                rxDialogSureCancel.cancel();
            }
        });
        rxDialogSureCancel.show();
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////广播监听网络变化
    public void func6() {
        RxBroadcastTool.BroadcastReceiverNetWork broadcastReceiverNetWork = RxBroadcastTool.initRegisterReceiverNetWork(this);
        broadcastReceiverNetWork.onReceive(this, new Intent(this, null));
    }

    /////////////////////////////////正则表达式判断手机号，身份证号，邮箱，URL，汉子，用户名，日期，IP地址
    public void func7() {
        if ("465456".equals(RxConstTool.REGEX_TEL)) ;
    }

    ////////////////////////////////////////////////////数据处理，格式化银行卡
    public void func8() {
        RxDataTool.formatCard("");
    }

    ///////////////////////////////////////////////////////获取手机型号
    public void func9() {
        RxDeviceTool.getAllSMS(this);
    }

    //////////////////////////////////////////////////////////////编码工具 ,转到base64

    public void func10() {
        RxEncodeTool.base64Decode("fsdaf");
    }

    /////////////////////////////////////////////////////////////文件工具类清楚缓存

    public void func11() {
        RxFileTool.cleanCustomCache("");
    }

    //////////////////////////////////////////////////////////图片工具

    public  void func12(){
       // RxImageTool.toRound("");
    }

    //////////////////////////////////////////////////////////////意图获取工具,获取安装APP的意图F

    public void function13(){
        RxIntentTool.getUninstallAppIntent("");
    }

    //////////////////////////////////////////////////////////////网络状态

    public void function14(){
        RxNetTool.getNetworkOperatorName(this);
    }
    //////////////////////////////////////////////// 一键搞定动态权限

    public void function15(){
      //  RxPermissionsTool.with(this).addPermission();

    }
    //////////////////////////////////////////////////获取进程杀死进程

    public void functiong16(){
        RxProcessTool.killAllBackgroundProcesses(this);
    }

    /////////////////////////////////////////////////////正则表达式,判断手机号

    public  void func17(){
        boolean b = RxRegTool.checkPhone("46354513246552.135");
    }
///////////////////////////////////////////////////////////获取服务是否开启
    public void func18(){

        boolean runningService = RxServiceTool.isRunningService(this, "");

    }

    /////////////////////////////////////////////////////判断设备是否root,是否是在toot下执行命令

    public void func19(){
        boolean root = RxShellTool.isRoot();
       // RxShellTool.execCmd();
    }

    ////////////////////////////////////////////////////////////缓存sharedpreferce

    public void func20(){
        RxSPTool.putBoolean(this,"",false);
    }

    //////////////////////////////////////////////////////////线程池相关的工作类

    public void func21(){
        ////////////////////////需要的时候再看吧
    }

    //////////////////////////////////////////////////////////   处理时间的工作类

    public void func22(){
        String s = RxTimeTool.date2String(new Date());
    }

    /////////////////////////////////////////////////////////压缩文件工作类
    public void func23(){
        RxZipTool.fileToZip("","","");
    }

    //////////////////////////////////////////////支付类,支持微信支付宝

    public void func24(){
//        AliPayTools.aliPay(mContext,
//                APP_ID,//支付宝分配的APP_ID
//                isRSA2,//是否是 RSA2 加密
//                RSA_PRIVATE,// RSA 或 RSA2 字符串
//                new AliPayModel(order_id,//订单ID (唯一)
//                        money,//价格
//                        name,//商品名称
//                        detail),//商品描述详情 (用于显示在 支付宝 的交易记录里)
//                new onRequestListener() {
//                    @Override
//                    public void onSuccess(String s) {RxToast.success("支付成功");}
//
//                    @Override
//                    public void onError(String s) {RxToast.error("支付失败");
//                    }
//                });

//        WechatPayTools.wechatPayUnifyOrder(mContext,
//                WX_APP_ID, //微信分配的APP_ID
//                WX_PARTNER_ID, //微信分配的 PARTNER_ID (商户ID)
//                WX_PRIVATE_KEY, //微信分配的 PRIVATE_KEY (私钥)
//                new WechatModel(order_id, //订单ID (唯一)
//                        money, //价格
//                        name, //商品名称
//                        detail), //商品描述详情
//                new onRequestListener() {
//                    @Override
//                    public void onSuccess(String s) {}
//
//                    @Override
//                    public void onError(String s) {}
//                });
//
    }

    private void initDialogChooseImage() {
        RxDialogChooseImage dialogChooseImage = new RxDialogChooseImage(this, TITLE);
        dialogChooseImage.show();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case RxPhotoTool.GET_IMAGE_FROM_PHONE://选择相册之后的处理
                if (resultCode == RESULT_OK) {
//                    RxPhotoTool.cropImage(ActivityUser.this, );// 裁剪图片
                    initUCrop(data.getData());
                }

                break;
            case RxPhotoTool.GET_IMAGE_BY_CAMERA://选择照相机之后的处理
                if (resultCode == RESULT_OK) {
                   /* data.getExtras().get("data");*/
//                    RxPhotoTool.cropImage(ActivityUser.this, RxPhotoTool.imageUriFromCamera);// 裁剪图片
                    initUCrop(RxPhotoTool.imageUriFromCamera);
                }

                break;
            case RxPhotoTool.CROP_IMAGE://普通裁剪后的处理
                Glide.with(this).
                        load(RxPhotoTool.cropImageUri).
                        diskCacheStrategy(DiskCacheStrategy.RESULT).
                        bitmapTransform(new CropCircleTransformation(this)).
                        thumbnail(0.5f).
                        placeholder(R.drawable.ic_launcher_background).
                        priority(Priority.LOW).
                        error(R.drawable.ic_launcher_background).
                        fallback(R.drawable.ic_launcher_background).
                        into(imageView);
//                RequestUpdateAvatar(new File(RxPhotoTool.getRealFilePath(mContext, RxPhotoTool.cropImageUri)));
                break;

            case UCrop.REQUEST_CROP://UCrop裁剪之后的处理
                if (resultCode == RESULT_OK) {
                    resultUri = UCrop.getOutput(data);
                    roadImageView(resultUri, imageView);
                    RxSPTool.putContent(this, "AVATAR", resultUri.toString());
                } else if (resultCode == UCrop.RESULT_ERROR) {
                    final Throwable cropError = UCrop.getError(data);
                }
                break;
            case UCrop.RESULT_ERROR://UCrop裁剪错误之后的处理
                final Throwable cropError = UCrop.getError(data);
                break;
            default:
                break;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    private void initUCrop(Uri uri) {
        //Uri destinationUri = RxPhotoTool.createImagePathUri(this);

        SimpleDateFormat timeFormatter = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA);
        long time = System.currentTimeMillis();
        String imageName = timeFormatter.format(new Date(time));

        Uri destinationUri = Uri.fromFile(new File(getCacheDir(), imageName + ".jpeg"));

        UCrop.Options options = new UCrop.Options();
        //设置裁剪图片可操作的手势
        options.setAllowedGestures(UCropActivity.SCALE, UCropActivity.ROTATE, UCropActivity.ALL);
        //设置隐藏底部容器，默认显示
        //options.setHideBottomControls(true);
        //设置toolbar颜色
        options.setToolbarColor(ActivityCompat.getColor(this, R.color.colorPrimary));
        //设置状态栏颜色
        options.setStatusBarColor(ActivityCompat.getColor(this, R.color.colorPrimaryDark));


        //开始设置
        //设置最大缩放比例
        options.setMaxScaleMultiplier(5);
        //设置图片在切换比例时的动画
        options.setImageToCropBoundsAnimDuration(666);
        //设置裁剪窗口是否为椭圆
        //options.setOvalDimmedLayer(true);
        //设置是否展示矩形裁剪框
        // options.setShowCropFrame(false);
        //设置裁剪框横竖线的宽度
        //options.setCropGridStrokeWidth(20);
        //设置裁剪框横竖线的颜色
        //options.setCropGridColor(Color.GREEN);
        //设置竖线的数量
        //options.setCropGridColumnCount(2);
        //设置横线的数量
        //options.setCropGridRowCount(1);

        UCrop.of(uri, destinationUri)
                .withAspectRatio(1, 1)
                .withMaxResultSize(1000, 1000)
                .withOptions(options)
                .start(this);
    }

    //从Uri中加载图片 并将其转化成File文件返回
    private File roadImageView(Uri uri, ImageView imageView) {
        Glide.with(this).
                load(uri).
                diskCacheStrategy(DiskCacheStrategy.RESULT).
                bitmapTransform(new CropCircleTransformation(this)).
                thumbnail(0.5f).
                placeholder(R.drawable.ic_launcher_background).
                priority(Priority.LOW).
                error(R.drawable.ic_launcher_background).
                fallback(R.drawable.ic_launcher_background).
                into(imageView);

        return (new File(RxPhotoTool.getImageAbsolutePath(this, uri)));
    }
}
